package com.shujia

/**
 * 面向对象：封装、继承、多态
 * 类中可以定义：属性、方法
 * {}就是默认的构造方法
 */
class Demo3StudentScala(id: String, name: String, age: Int) {
  println("调用了默认的构造方法")

  // 定义类的属性 定义即赋值
  val _id: String = id
  val _name: String = name
  val _age: Int = age
  var _gender: String = _ // 使用_表示 稍后进行赋值，但在定义变量的时候必须声明类型


  // 重载构造方法
  def this(id: String, name: String, age: Int, gender: String) {
    // 第一行代码必须通过this调用默认的构造方法
    this(id, name, age)
    println("调用了新的构造方法")
    _gender = gender

  }


  // 重写了父类的方法
  override def toString(): String = {
    return s"Demo3StudentScala(_id=${_id}, _name=${_name}, _age=${_age}, _gender=${_gender})"
  }
}

object Demo3Obj {
  def main(args: Array[String]): Unit = {
    // 创建对象
    val stu1: Demo3StudentScala = new Demo3StudentScala("001", "张三", 20)
    val stu4: Demo3StudentScala = new Demo3StudentScala("005", "小花", 23, "女")

    println(stu1._id)
    println(stu1._name)
    println(stu1._age)
    println(stu1.toString())
    println(stu1)

    println(stu4)

    // 在Scala中使用Java的类
    val stu2: Demo2JavaStudent = new Demo2JavaStudent("001")
    val stu3: Demo2JavaStudent = new Demo2JavaStudent("002", "李四", 22)
    println(stu2)
    println(stu3)

  }
}
